package jwr.basic;

public class J12_SungJuk_v4b {

	public static void main(String[] args) {
		//접근 지정자를 이용해 SungJuk 클래스 정의
		J12SungJuk sj = new J12SungJuk();
		//private로 선언된 멤버변수를 조작하거나 값을 읽어올려면
		//그것을 위한 특별한 메서드를 작성하는것이 좋음
		// 실무에서는 setter/getter 메서드를 작성함
		sj.setInfo("조우람",100, 90, 70);
		/*System.out.println("이름 : " + sj.getName());
		System.out.println("국어점수 : "+sj.getKor());
		System.out.println("영어점수 : "+sj.getEng());
		System.out.println("수학점수 : "+sj.getMat());
		System.out.println("총점 : "+sj.getTot());
		System.out.println("평균 : "+sj.getAvg());
		System.out.println("학점 : "+sj.getGrd());*/
		
		//toString() 메서드를 이용해서 객체의 모든 멤버변수 출력하기
		
		System.out.println(sj.toString());
	} //main
} //class

class J12SungJuk{
	private String name;
	private int kor, eng, mat, tot;
	private double avg;
	private char grd;
	public J12SungJuk() {
		
	}
	public J12SungJuk(String name,int kor, int eng, int mat){
		this.name = name;
		this.kor = kor;
		this.eng = eng;
		this.mat = mat;
	}
	//setter 메서드 : 멤버변수에 값을 set하기 위한 메서드
	//public set멤버변수명(자료형 멤버변수명){
	//	this.멤버변수명 = 멤버변수명;
	//}
	public void setInfo(String name,int kor,int eng,int mat){
		this.name = name;
		this.kor = kor;
		this.eng = eng;
		this.mat = mat;
	}
	//getter 메서드 : 멤버변수의 값을 get하기 위한 메서드
	//public 멤버변수 자료형 get 멤버변수명(){
	//	return 멤버변수명;
	//}
	public String getName(){
		return name;
	}//getName();
	public int getKor(){
		return kor;
	}//getKor()
	public int getEng(){
		return eng;
	}//getEng()
	public int getMat(){
		return mat;
	}//getMat()
	
	//객체지향 프로그래밍에서는 메서드에 너무 많은 책임을 부여하는 것을 금지하고 있음
	// 예를들어, getTot 메서드를 살펴보면 단순히 tot 변수의 값을 읽어오는 기능 외에
	// 입력한 성적데이터에 대한 총점을 구하는 기능도 포함
	public int getTot(){
		tot = kor+eng+mat;
		return tot;
	}//getTot()
	public double getAvg(){
		avg = tot/3;
		return avg;
	}//getAvg()
	public char getGrd(){
		switch ((int)(avg/10))
		{
			case 10:
			case 9: { 
				grd='수'; 
				break;
			}
			case 8: {
				grd = '우'; 
				break;
			}
			case 7: { 
				grd = '미'; 
				break;
			}
			case 6: { 
				grd = '양'; 
				break;
			}
			default:{
				grd = '가';
			}
		}
		return grd;
	}//getGrd()
	
	// 멤버변수의 모든 값을 출력하기 위해 
	// Object 클래스가 기본적으로 제공하는
	// 메서드인 toString()을 재정의 overriding
	@Override // 어노테이션 : 컴파일러를 위한 주석
	public String toString() {
		String result = "";
		result +="이름 : "+ name;
		result +="\n국어 : "+ kor;
		result +="\n영어 : "+ eng;
		result +="\n수학 : "+ mat;
		result +="\n총점 : "+ getTot();
		result +="\n평균 : "+ getAvg();
		result +="\n학점 : "+ getGrd();
		return result;
	}
}
